// axios封装

import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 实例化
const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net/', // 接口根地址
  timeout: 5000 // 超时时间
})

// 请求拦截器 全局注入token
instance.interceptors.request.use((config) => {
  // 1.获取token
  const token = store.state.user.token
  // 2.请求头设置token
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, error => Promise.reject(error))

// 响应拦截器
// token失效跳回到登录页
instance.interceptors.response.use(res => res.data, e => {
  if (e.response && e.response.status === 401) {
    const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
    router.push('/login?redirectUrl=' + redirectUrl)
  }
  return Promise.reject(e)
})

// 封装一个通用的函数 帮助用户解决get post 传参形式的不一样

export default function request (url, method, reqData) {
  return instance({
    url,
    method,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
  })
}
